/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package UI.funcionarios;

import UI.PanelFormularioGenerico;
import gestorBD.Controlador;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import uiMain.OpcionDeMenu;
import static uiMain.bienRaizOk.ventana;

/**
 *
 * @author Nicolás
 */
public class PanelOpcionRegistrarUnCliente extends OpcionDeMenu {

    JPanel panelTipoDeCliente;
    PanelFormularioGenerico panelFormulario;
    JPanel panelDeBotones;

    String[] labelsDemandante = {"Cédula", "Nombre", "Dirección", "Teléfono", "Celular (opcional)", "Presupuesto", "Lugar de preferencia", "Estrato deseado", "Otras preferencias"};
    String[] valoresDemandante = {"", "", "", "", "", "", "", "", ""};

    String[] labelsOferente = {"Cédula", "Nombre", "Dirección", "Teléfono", "Celular (opcional)"};
    String[] valoresOferente = {"", "", "", "", ""};

    public PanelOpcionRegistrarUnCliente() {
        super();
    }

    @Override
    public void ejecutar() {
        this.setLayout(new BorderLayout());

        JLabel labelSeleccioneTipoDeCliente = new JLabel("Seleccione el tipo de cliente");
        String[] tiposDeCliente = {"Oferente", "Demandante"};
        JComboBox comboBoxTipoDeCliente = new JComboBox(tiposDeCliente);

        this.panelTipoDeCliente = new JPanel(new FlowLayout());
        this.panelTipoDeCliente.add(labelSeleccioneTipoDeCliente);
        this.panelTipoDeCliente.add(comboBoxTipoDeCliente);
        this.add(panelTipoDeCliente, BorderLayout.NORTH);

        this.panelFormulario = new PanelFormularioGenerico();
        this.panelDeBotones = new JPanel(new FlowLayout());

        JButton botonRegistrar = new JButton("Registrar cliente");
        this.panelDeBotones.add(botonRegistrar);

        JButton botonVolver = new JButton("Volver");
        this.panelDeBotones.add(botonVolver);

        //Se añaden las funcionalidades
        comboBoxTipoDeCliente.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                switch (comboBoxTipoDeCliente.getSelectedIndex()) {

                    case 0://Cliente oferente
                        String[] valoresVaciosOferente = {"", "", "", "", ""};
                        valoresOferente = valoresVaciosOferente;
                        int[] tiposDeCampoOferente = {1, 0, 0, 1, 1};
                        setPanelFormulario(new PanelFormularioGenerico("Criterio", "Valor", labelsOferente, valoresOferente, tiposDeCampoOferente));
                        break;
                    case 1: //Cliente demandante
                        String[] valoresVaciosDemandante = {"", "", "", "", "", "", "", "", ""};
                        valoresDemandante = valoresVaciosDemandante;
                        int[] tiposDeCampoDemandante = {1, 0, 0, 1, 1, 1, 0, 4, 0};
                        setPanelFormulario(new PanelFormularioGenerico("Criterio", "Valor", labelsDemandante, valoresDemandante, tiposDeCampoDemandante));
                        break;
                }
            }
        });

        botonRegistrar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                boolean sePudoRegistrar;
                long cedula;
                String nombre;
                if (comboBoxTipoDeCliente.getSelectedIndex() == 0) { //Si se va a registrar un cliente oferente
                    for (int i = 0; i < labelsOferente.length; i++) {
                        if (!labelsOferente[i].contains("opcional") && valoresOferente[i].equals("")) {
                            String textoPopUp = "El campo " + labelsOferente[i].toLowerCase() + " es obligatorio";
                            JOptionPane.showMessageDialog(null, textoPopUp, "Error", JOptionPane.ERROR_MESSAGE);
                            return;
                        }
                    }
                    cedula = Long.parseLong(valoresOferente[0]);
                    nombre = valoresOferente[1];
                    String direccion = valoresOferente[2];
                    long telefono = Long.parseLong(valoresOferente[3]);
                    long celular = 0;
                    if (!valoresOferente[4].equals("")) {
                        celular = Long.parseLong(valoresOferente[4]);
                    }
                    sePudoRegistrar = Controlador.registrarNuevoClienteOferente(cedula, nombre, direccion, telefono, celular);
                } else { //Si se va a registrar un cliente demandador
                    for (int i = 0; i < labelsDemandante.length; i++) {
                        if (!labelsDemandante[i].contains("opcional") && valoresDemandante[i].equals("")) {
                            String textoPopUp = "El campo " + labelsDemandante[i].toLowerCase() + " es obligatorio";
                            JOptionPane.showMessageDialog(null, textoPopUp, "Error", JOptionPane.ERROR_MESSAGE);
                            return;
                        }
                    }
                    cedula = Long.parseLong(valoresDemandante[0]);
                    nombre = valoresDemandante[1];
                    String direccion = valoresDemandante[2];
                    long telefono = Long.parseLong(valoresDemandante[3]);
                    long celular = 0;
                    if (!valoresDemandante[4].equals("")) {
                        celular = Long.parseLong(valoresDemandante[4]);
                    }
                    long presupuesto = Long.parseLong(valoresDemandante[5]);
                    String lugar = valoresDemandante[6];
                    byte estrato = Byte.parseByte(valoresDemandante[7]);
                    String preferencias = valoresDemandante[8];
                    sePudoRegistrar = Controlador.registrarNuevoClienteDemandante(cedula, nombre, direccion, telefono, celular, presupuesto, lugar, estrato, preferencias);
                }

                if (!sePudoRegistrar) {
                    String textoPopUp = "Ya existe un usuario en el sistema con cédula " + cedula;
                    JOptionPane.showMessageDialog(null, textoPopUp, "Error", JOptionPane.ERROR_MESSAGE);
                } else {
                    String textoPopUp = "El cliente " + nombre + " ha sido registrado de manera exitosa";
                    JOptionPane.showMessageDialog(null, textoPopUp, "Información", JOptionPane.INFORMATION_MESSAGE);
                    ventana.mostrarPanelOpcionesDeFuncionario();
                }
            }

        });

        botonVolver.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ventana.mostrarPanelOpcionesDeFuncionario();
            }

        });

        ventana.mostrarPanel(this);

    }

    private void setPanelFormulario(PanelFormularioGenerico nuevoPanelFormulario) {

        this.remove(this.panelFormulario);
        this.remove(this.panelDeBotones);
        this.panelFormulario = nuevoPanelFormulario;
        this.add(this.panelFormulario, BorderLayout.CENTER);
        this.add(this.panelDeBotones, BorderLayout.SOUTH);
        this.revalidate();
        this.repaint();
    }

    @Override
    public String toString() {
        return "Registrar a un cliente";
    }

}
